import { ElMessage } from 'element-plus'
import { createRouter, createWebHistory } from 'vue-router'
import { useAuthStore } from '@/stores/authStore.js'
import routes from './routes.js'

let authStore = null

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: routes,
})

router.beforeEach(async (to, from, next) => {
  // 1. 判断访问的路由需不需要验证登录
  if (to.meta.isPublic) {
    next()
    return
  }
  // 2. 在需要授权的路由上判断,是否已经完成了有效登录
  if (authStore == null) {
    // 判断中央仓库是否存在,如果存在不进行重复创建,如果不存在再进行创建
    authStore = useAuthStore()
  }
  if (authStore.token == null) {
    ElMessage.error('请先登录')
    next({
      name: 'login',
    })
    return
  }
  // 3. 用户访问的链接是否是当前用于允许访问的链接
  // 用户想要访问的链接 to.path
  // 允许访问的链接 authStore.menus => 刚开始访问时，默认是空的，需要进行异步请求初始化
  if (authStore.menus.length == 0) {
    await authStore.initMenus()
  }
  // console.log(to.path)

  if (to.path == '/home') {
    ;((authStore.activeTitle = authStore.menus[0].right_name),
      // console.log(authStore.menus[0].right_path)
      next({
        path: authStore.menus[0].right_path,
      }))
    return
  }
  // 判断登录的用户的权限，是否允许访问导航需要的地址
  let flag = authStore.menus.some((item) => item.right_path == to.path)
  if (flag) {
    // 如果有，允许访问
    next()
  } else {
    // 不允许访问
    // console.log('403')
    next('/home/403')
  }
})

export default router
